package com.xuecheng.content.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xuecheng.api.content.model.CourseBaseDTO;

import com.xuecheng.api.content.model.qo.QueryCourseModel;
import com.xuecheng.common.domain.page.PageRequestParams;
import com.xuecheng.common.domain.page.PageVO;
import com.xuecheng.common.util.StringUtil;

import com.xuecheng.content.entity.CourseBase;
import com.xuecheng.content.mapper.CourseBaseMapper;
import com.xuecheng.content.service.CourseBaseService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.Collections;
import java.util.List;

/**
 * <p>
 * 课程基本信息 服务实现类
 * </p>
 *
 * @author itcast
 */
@Slf4j
@Service
public class CourseBaseServiceImpl extends ServiceImpl<CourseBaseMapper, CourseBase> implements CourseBaseService {


    /*
     * 步骤分析：
     *  1.是否需要开启事务（查询不需要，增删改时需要开启）
     *  2.判断关键数据（代码健壮性）
     *       分页数据
     *       查询条件
     *  3.构建mp分页对象
     *  4.构建查询条件对象LambdaQueryWrapper
     *  5.查询数据
     *  6.获得数据并封装返回结果
     *       封装PageVo数据
     * */
    @Override
    public PageVO<CourseBaseDTO> queryCourseBaseList(PageRequestParams params, QueryCourseModel model) {
        // 1.判断业务数据
        // 1.1 判断分页数据
        if (params.getPageNo() < 1) {
            params.setPageNo(PageRequestParams.DEFAULT_PAGE_NUM);
        }
        if (params.getPageSize() < 1) {
            params.setPageSize(PageRequestParams.DEFAULT_PAGE_SIZE);
        }
        LambdaQueryWrapper<CourseBase> queryWrapper = new LambdaQueryWrapper<>();

        // 1.2 判断条件查询数据（如果查询条件有数据，在sql中添加条）
        // 完整版
//         if (StringUtil.isNotBlank(model.getAuditStatus())) {
//             // 添加的审核状态条件（eq）
//             queryWrapper.eq(CourseBase::getAudit_status, model.getAuditStatus());
//         }
//
//
//
//         if (StringUtil.isNotBlank(model.getCourseName())) {
//             // 添加的课程名称条件（like）
//             queryWrapper.like(CourseBase::getName, model.getCourseName());
//         }

        // 简写版
        queryWrapper.eq(StringUtil.isNotBlank(model.getAuditStatus()),
                CourseBase::getAudit_status, model.getAuditStatus());

        queryWrapper.like(StringUtil.isNotBlank(model.getCourseName()),
                CourseBase::getName, model.getCourseName());


        // 2.创建分页数据
        Page<CourseBase> page = new Page<>(params.getPageNo(),params.getPageSize());


        // 3.根据分页和查询调价查询list数据
        Page<CourseBase> pageResult = this.page(page, queryWrapper);


        List<CourseBase> records = pageResult.getRecords();


        long total = pageResult.getTotal();

        // 4.将查询结果封装到PageVO中
        /*
         * PageVO构造方法：
         *   1.当前页的集合数据
         *   2.数据库中的总条数
         *   3.当前页码
         *   4.每页条数
         * */
        PageVO pageVO = new PageVO(records,total,params.getPageNo(),params.getPageSize());

        return pageVO;
    }



}